package Ex100.test3;

/*
 * Title: 数组数据操作.
 * Description: 演示一维数组和多维数组的初始化和基本操作.
 * Filename: myArray.java .
 */
public class myArray {
    char[] cNum = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
    char[] cStr = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
    int[] iMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    String[] sMail = {"@", "."};

    public static void main(String[] args) {
        myArray mA = new myArray();
        //校验邮件地址
        boolean bMail = mA.isMail("tome@163.coom");
        System.out.println("1 bMail is " + bMail);
        bMail = mA.isMail("tome@163coom");
        System.out.println("2 bMail is " + bMail);
        //演示是否是数字
        boolean bIsNum = mA.isNumber("1234");
        System.out.println("1 bIsNum=" + bIsNum);
        bIsNum = mA.isNumber("123r3");
        System.out.println("2 bIsNum=" + bIsNum);
        //演示是否是英文字符
        boolean bIsStr = mA.isString("wer");
        System.out.println("1 bIsStr=" + bIsStr);
        bIsStr = mA.isString("wer3");
        System.out.println("2 bIsStr=" + bIsStr);
        //演示检查日期
        int iIsTime = mA.chickDate("2003-12-98");
        System.out.println("1 iIsTime=" + iIsTime);
        iIsTime = mA.chickDate("2003-111-08");
        System.out.println("2 iIsTime=" + iIsTime);
        iIsTime = mA.chickDate("2003-10-08");
        System.out.println("3 iIsTime=" + iIsTime);
        iIsTime = mA.chickDate("2000-02-30");
        System.out.println("4 iIsTime=" + iIsTime);
    }

    /*
     * 方法说明:校验电子邮件.
     * 输入参数:String sPara 被校验的电子邮件字符.
     * 返回类型:boolean 如果校验的格式符合电子邮件格式返回true;否则返回false.
     */
    public boolean isMail(String sPara) {
        for (int i = 0; i < sMail.length; i++) {
            if (sPara.indexOf(sMail[i]) == -1) {
                return false;
            }
        }
        return true;
    }

    /*
     * 方法说明:判断是否是数字.
     * 输入参数: String sPara, 需要判断的字符串.
     * 返回类型: boolean,如果都是数字类型，返回true;否则返回false.
     */
    public boolean isNumber(String sPara) {
        int iPLength = sPara.length();
        for (int i = 0; i < iPLength; i++) {
            char cTemp = sPara.charAt(i);
            boolean bTemp = false;
            for (int j = 0; j < cNum.length; j++) {
                if (cTemp == cNum[j]) {
                    bTemp = true;
                    break;
                }
            }
            if (!bTemp) return false;
        }
        return true;
    }

    /*
     * 方法说明: 判断是否都是英文字符.
     * 输入参数: String sPara, 要检查的字符.
     * 返回类型: boolean,如果都是字符返回true;反之为false.
     */
    public boolean isString(String sPara) {
        int iPLength = sPara.length();
        for (int i = 0; i < iPLength; i++) {
            char cTemp = sPara.charAt(i);
            boolean bTemp = false;
            for (int j = 0; j < cStr.length; j++) {
                if (cTemp == cStr[j]) {
                    bTemp = true;
                    break;
                }
            }
            if (!bTemp) return false;
        }
        return true;
    }

    /*
     * 方法说明: 判断是否是闰年.
     * 输入参数: int iPara, 要判断的年份.
     * 返回类型: boolean, 如果是闰年返回true, 否则返回false
     */
    public boolean chickDay(int iPara) {
        return iPara % 100 == 0 && iPara % 4 == 0;
    }

    /*
     * 方法说明: 检查日期格式是否正确.
     * 输入参数: String sPara, 要检查的日期字符.
     * 返回类型: int,0日期格式正确,-1月或者日不合要求,-2年月日格式不正确.
     */
    public int chickDate(String sPara) {
        @SuppressWarnings("unused") boolean bTemp = false;
        //所输入日期长度不正确
        if (sPara.length() != 10) return -2;
        //获取年
        String sYear = sPara.substring(0, 4);
        //判断年是否为数字
        if (!isNumber(sYear)) return -2;    //直接调用同一类下的方法
        //获取月份
        String sMonth = sPara.substring(5, 7);
        //判断月份是否为数字
        if (!isNumber(sMonth)) return -2;
        //获取日
        String sDay = sPara.substring(8, 10);
        //判断日是否为数字
        if (!isNumber(sDay)) return -2;
        //将年、月、日转换为数字
        int iYear = Integer.parseInt(sYear);
        int iMon = Integer.parseInt(sMonth);
        int iDay = Integer.parseInt(sDay);
        if (iMon > 12) return -1;
        //闰年二月处理
        if (iMon == 2 && chickDay(iYear)) {
            if (iDay > 29) return -2;
        } else {
            if (iDay > iMonth[iMon - 1]) return -1;
        }
        return 0;
    }
}
